<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // 将数组转换为这种格式:
    // [
    //   { value: number },
    //   { value: number },
    //   { value: number },
    //   {
    //     children: [
    //       { value: number },
    //       { value: number },
    //     ]
    //   },
    //   { value: number },
    // ]

    const arr = [1, 2, 3, [4, 5], 6, 7, [5, 6, [10, 5]]]
    // function convert(arr) {
    //   // 准备结果数组
    //   let result = []
    //   for (let i = 0; i < arr.length; i++) {
    //     // 如果遍历的数字,直接放入
    //     if (typeof arr[i] == 'number') {
    //       result.push({
    //         value: arr[i]
    //       })
    //       // 如果是数组,递归
    //     } else if (Array.isArray(arr[i])) {
    //       result.push({
    //         children: convert(arr[i])
    //       })
    //     }
    //   }
    //   return result
    // }

    // 第一种写法的递归次数要少于第二种，但是第二种写法更妙，代码更简洁
    function convert(item) {
      if (typeof item == 'number') {
        return {
          value: item
        }
      } else if (Array.isArray(item)) {
        return {
          children: item.map(_item => convert(_item))
        }
      }

    }
    console.log(convert(arr));
  </script>
</body>

</html>